pub(crate) mod data_type;

/**
 * 变量绑定
 *   - 变量绑定：将一个值与一个变量关联起来
 *  变量声明为可变
 */
pub fn variables() {
    let mut x = 5;
    println!("The value of x is: {}", x);
    x = 6;
    println!("The value of x is: {}", x);
}

/**
 * 变量解构
 * let 表达式不仅仅用于变量的绑定，还能进行复杂变量的解构
 */
pub fn destructuring() {
    let (a, mut b): (bool,bool) = (true, false);
    // a = true,不可变; b = false，可变
    println!("a = {:?}, b = {:?}", a, b);

    b = true;
    println!("The value  a :{} b: {}",a, b);
}

/**
 * 常量的声明
 */
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;

/**
 * Rust 允许声明相同的变量名，在后面声明的变量会遮蔽掉前面声明的
 */
pub fn same_variable_name() {
    let x = 5;
    // 在main函数的作用域内对之前的x进行遮蔽
    let x = x + 1;

    {
        // 在当前的花括号作用域内，对之前的x进行遮蔽
        let x = x * 2;
        println!("The value of x in the inner scope is: {}", x);
    }
    println!("The value of x is: {}", x);
}
